/*
 * @Copyright: (C) 2019 Zhang Rida. All rights reserved.
 *
 * @Author: Zhang Rida
 * @Email: 215154317@qq.com
 * @FilePath: /WEILA_SDK_MODULE/include/wl_core.h
 * @Date: 2021-02-23 18:23:03
 * @Description: message for weila osal
 *
 * @LastEditors: Zhang Rida
 * @LastEditTime: 2023-08-25 15:13:08
 */
#ifndef _WL_CORE_H
#define _WL_CORE_H

#include "wl_types.h"

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


// 暂时去掉mmi, mmi采用系统得task和队列
typedef enum { WL_TASK_APP = 0, WL_TASK_MEDIA, WL_TASK_FILE, WL_TASK_MAX } wl_task_id;

typedef enum {
    // TASK APP
    WL_MODULE_LOGIN = 0,
    WL_MODULE_USER,
    WL_MODULE_GROUP,
    WL_MODULE_FRIEND,
    WL_MODULE_SESSION,
    WL_MODULE_LOCATION,
    WL_MODULE_CORP,
    WL_MODULE_KEEPALIVE,
    WL_MODULE_BURST,
    // TASK MEDIA
    WL_MODULE_MEDIA,
    // TASK FILE
    WL_MODULE_REPO,

    // TASK MMI MSG
    WL_MODULE_MMI_MSG,
    WL_MODULE_MAX
} wl_module_id;

typedef wl_int32 (*wl_message_callback)(wl_int32 msgid, void* data, wl_uint32 datalen);

typedef struct {
    wl_int32            moduleid;  // 模块id
    wl_int32            taskid;    // 模块运行task
    wl_message_callback callback;  // 模块消息回调函数
} wl_module;

/**
 * @description: 初始化core
 * @param 无
 * @return 成功 0 失败 -1
 */
wl_int32 wl_core_init(void);

/**
 * @description: 是否core
 * @param 无
 * @return 无
 */
void wl_core_end(void);

/**
 * @description: 发送模块消息
 * @param 模块id 接收模块id
 * @param msgid 消息id
 * @param data 消息数据
 * @param datalen 消息数据长度
 * @return 成功 0 失败 -1
 */
wl_int32 wl_core_send_message(wl_int32 moduleid, wl_int32 msgid, void* data, wl_int32 datalen);

/**
 * @description: 注册模块
 * @param module 模块参数
 * @return 成功 0 失败 -1
 */
wl_int32 wl_core_register_module(wl_module* module);

/**
 * @description: 注销模块
 * @param moduleid 模块id
 * @return 无
 */
void wl_core_unregister_module(wl_int32 moduleid);

#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /*_WL_CORE_H */
